{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3>Nonlinear regression with the linear model</h3>\n",
    "<p>Start by loading the data</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "data = np.loadtxt('/Users/simon/git/fcmlcode/labs/linear_regression/data100m.csv',delimiter=',')\n",
    "x = data[:,0][:,None]\n",
    "t = data[:,1][:,None]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h4>Rescaling $x$</h4>\n",
    "<p>We re-scale the Olympic year value to help with numerical problems when we look at high orders. Satisfy yourself that this doesn't make any difference!</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "x = (x-1896)/4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h4>Creating $\\mathbf{X}$</h4>\n",
    "<p>We loop up to the desired order, adding columns to $\\mathbf{X}$ at each stage</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[  1.    0. ]\n",
      " [  1.    1. ]\n",
      " [  1.    2. ]\n",
      " [  1.    2.5]\n",
      " [  1.    3. ]\n",
      " [  1.    4. ]\n",
      " [  1.    6. ]\n",
      " [  1.    7. ]\n",
      " [  1.    8. ]\n",
      " [  1.    9. ]\n",
      " [  1.   10. ]\n",
      " [  1.   13. ]\n",
      " [  1.   14. ]\n",
      " [  1.   15. ]\n",
      " [  1.   16. ]\n",
      " [  1.   17. ]\n",
      " [  1.   18. ]\n",
      " [  1.   19. ]\n",
      " [  1.   20. ]\n",
      " [  1.   21. ]\n",
      " [  1.   22. ]\n",
      " [  1.   23. ]\n",
      " [  1.   24. ]\n",
      " [  1.   25. ]\n",
      " [  1.   26. ]\n",
      " [  1.   27. ]\n",
      " [  1.   28. ]\n",
      " [  1.   29. ]]\n"
     ]
    }
   ],
   "source": [
    "maxorder = 1\n",
    "X = np.ones_like(x)\n",
    "for i in range(1,maxorder+1):\n",
    "    X = np.hstack((X,x**i))\n",
    "\n",
    "# X = np.hstack((X,np.sin(x)))\n",
    "print X"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>Solve the system...</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 11.13910644]\n",
      " [ -0.0531013 ]]\n"
     ]
    }
   ],
   "source": [
    "w = np.dot(np.linalg.inv(np.dot(X.T,X)),np.dot(X.T,t))\n",
    "print(w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a test set in the same manner as $\\mathbf{X}$..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "x_test = np.linspace(0,30,100)[:,None]\n",
    "X_test = np.ones_like(x_test)\n",
    "for i in range(1,maxorder+1):\n",
    "    X_test = np.hstack((X_test,x_test**i))\n",
    "# X_test = np.hstack((X_test,np.sin(x_test)))\n",
    "f_test = np.dot(X_test,w)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x10c2380d0>]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAFkCAYAAAB1rtL+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xl8VNX5x/HPMxAFIeCuGAMJohiXouDSKO4IWCViqUvq\n+qtVq8YooFYLFUSodUFEjdVq61qpWqoSZRG3WhFRA2rViIqJAgqCC0QWjeT8/jgTJ4QkJDczuTPJ\n9/16zau/3DP3zjP3NzjPnOU55pxDREREJIhI2AGIiIhI6lIiISIiIoEpkRAREZHAlEiIiIhIYEok\nREREJDAlEiIiIhKYEgkREREJTImEiIiIBKZEQkRERAJTIiEiIiKBNTmRMLPDzGyamS01syozy6vR\n1t7MbjCzd8zsu+hzHjCzbo247sVmVmZm68zsNTM7sKmxiYiISMsK0iPRCXgLuBiovVHHVsB+wLXA\n/sBJQG/gqYYuaGanAhOBMdHz3gZmmdn2AeITERGRFmLN2bTLzKqAoc65aQ085wBgHtDDObeknue8\nBsxzzl0a/duAxcBtzrkbAwcoIiIiCdUScyS2xvdcfFtXo5mlAf2A56uPOZ/dPAfktkB8IiIiElD7\nRF7czLYE/gw84pz7rp6nbQ+0A5bXOr4cPyxS13W3AwYB5cD6uAQrIiLSNnQAsoBZzrmvmnuxhCUS\nZtYeeBzfG3FRkEuw6RyMaoOAfwQMTUREROB04JHmXiQhiUSNJCITOLqB3giAlcAGYKdax3dk016K\nauUADwM5+Gzjwm7duOvpp5sRddswfPhwJk2aFHYYKUX3LBjdt6bTPQtG961pSktLOeOMMyD6Xdpc\ncU8kaiQRPYGjnHPfNPR851ylmZUAxwDTotew6N+31XPaevBJRF9gRiTCL04+mb59+8bnTbRiXbt2\n1X1qIt2zYHTfmk73LBjdt8DiMjWgyYmEmXUCeuGHHgB6mlkf4Gvgc2AqfgnoCUCamVX3NHztnKuM\nXuN5YKpz7s5o2y3AA9GE4nVgOH4p6f0NxeLwScSknBymjh/f1LciIiIizRSkR+IA4EX897jD138A\neABfP2JI9Phb0ePVcx2OAl6OHsvGT7IEwDn3WLRmxDj8EMdbwCDn3IqGArmoWzeOO/lkpo4fT3p6\neoC3IiIiIs3R5ETCOfcfGl42utklpc65nnUcuxO4s46n1+svTz+t7iwREZEQaa+NNiY/Pz/sEFKO\n7lkwum9Np3sWjO5buJpV2TIsZtYXKCkpKVGPhIiISBPMnz+ffv36AfRzzs1v7vXUIyEiIiKBKZEQ\nERGRwJRIiIiISGBKJERERCQwJRIiIiISmBIJERERCUyJhIiIiASmREJEREQCUyIhIiIigSmREBER\nkcCUSIiIiEhgSiREREQkMCUSIiIiEpgSCREREQlMiYSIiIgEpkRCREREAlMiISIiIoEpkRAREZHA\nlEiIiIhIYEokREREJDAlEiIiIhKYEgkREREJTImEiIiIBKZEQkRERAJTIiEiIiKBKZEQERGRwJRI\niIiISGBKJERERCQwJRIiIiISmBIJERERCUyJhIiIiASmREJEREQCUyIhIiIigSmREBERkcCUSIiI\niEhgSiREREQkMCUSIiIiEpgSCREREQlMiYSIiIgEpkRCREREAlMiISIiIoEpkRAREZHAlEiIiIhI\nYEokREREJDAlEiIiIhKYEgkREREJTImEiIiIBKZEQkRERAJTIiEiIiKBNTmRMLPDzGyamS01syoz\ny6vVfpKZzTSzFdH2nzXimmdHn7sh+r9VZra2qbGJiIhIywrSI9EJeAu4GHD1tL8C/L6e9vqsAnau\n8egRIDYRERFpQe2beoJzbiYwE8DMrI72h6NtPYBN2hu+tFvR1HhEREQkPMk0R6KzmZWb2Wdm9qSZ\n7RV2QCIiItKwZEkkFgK/AfKA0/FxvWpmGaFGJSIiIg1q8tBGIjjnXgNeq/7bzOYCpcD5wJj6zhs+\nfDhdu3bd6Fh+fj75+fkJilRERCR1TJkyhSlTpmx0bNWqVXF9DXOuKfMha51sVgUMdc5Nq6OtB1AG\n7OeceyfAtR8DKp1zp9fR1hcoKSkpoW/fvgEiFxERaZvmz59Pv379APo55+Y393qJHtoIlKWYWQTY\nB/givuGIiIhIPDV5aMPMOgG9iK3I6GlmfYCvnXOLzWwboDuQEX3OntHVHcucc8uj13gAWOqc+0P0\n7z/ihzY+BrYGrsQv/7y3OW9OREREEivIHIkDgBfxvQ0OmBg9/gCxCZP31WivHpy5FhgX/b8zgQ01\nrrkN8Fd8/YhvgBIg1zn3QYD4REREpIUEqSPxHxoYEnHOPYBPKhq6xtG1/h4BjGhqLCIiIhKuZFn+\nKSIiIilIiYSIiIgEpkRCREREAlMiISIiIoEpkRAREZHAlEiIiIhIYEokREREJDAlEiIiIhKYEgkR\nEREJTImEiIiIBKZEQkRERAJTIiEiIiKBKZEQERGRwJRIiIiISGBKJERERCQwJRIiIiISmBIJERER\nCUyJhIiIiASmREJEREQCUyIhIiIigSmREBERkcCUSIiIiEhgSiREREQkMCUSIiIiEpgSCREREQlM\niYSIiIgEpkRCREREAlMikQDOubBDEBERaRFKJOKkoqKCMYWFDMjOZmhmJgOysxlTWEhFRUXYoYmI\niCRM+7ADaA0qKioYlpvLiNJSxlZVYYADZhUVMeyFF5g6dy7p6elhhykiIhJ36pGIg5tHjWJEaSmD\no0kEgAGDq6oYXlrKxNGjwwxPREQkYZRIxMGc4mIGVVXV2Ta4qoo506a1cEQiIiItQ4lEMznn6FRZ\n+VNPRG0GbFVZqQmYIiLSKimRaCYzY01aGvWlCQ5Yk5aGWX2phoiISOpSIhEHhw4ZwqxI3bdyZiRC\n/7y8Fo5IRESkZSiRiIPLJ0zglpwcZkQiP/VMOGBGJMKknBxGjh8fZngiIiIJo0QiDtLT05k6dy7z\nCgoYmJXFiRkZDMzKYl5BgZZ+iohIq5bSdSTqWSgRivT0dMZOngyTJ+Oc05wIERFpE1K6R+Kkk+DW\nW2HVqrAj2ZiSCBERaStSOpFYsgSGD4eMDLjoInj//bAjEhERaVtSOpGotmYN/OUvsPfecMwx8OST\nsGFD2FGJiIi0fimdSPzrX74nolOn2LEXXvBDHj17wg03wFdfhRefiIhIa5fSiUR2NhQVwdKlfq5E\nr16xts8+g6uugl13hXPPhQULwotTRESktUrpRKJa165w6aWwcCHMmAG/+EWsbf16+PvfoW9f6N8f\nHn0UKivDi1VERKQ1aRWJRLVIBAYPhmeegY8+gssugy5dYu1z5sBpp0GPHjBuHCxfHl6sIiIirUGr\nSiRq6tULJk3ywx533gl77RVr++ILGDMGMjPhjDNg3rzw4hQREUllrTaRqNa5M1x4Ibz7Ljz/PAwd\n6nsuwA9x/OMf8POfw0EHwYMPwvffhxuviIhIKmn1iUQ1Mzj6aHjiCfjkE/j972HbbWPtb7wBZ5/t\neylGj/Y1KkRERKRhbSaRqKlHD/jzn32y8Pe/w/77x9pWrIAJEyArC045BV5+GVx9e4SLiIi0cW0y\nkajWsSP83/9BSQm88oqfiNk+uvvIhg3w+ONwxBE+0bj3Xli7Ntx4RUREkk2bTiSqmcGhh8KUKfDp\np3DNNbDTTrH2t9+G887zNSmuvBLKysKLVUREJJk0OZEws8PMbJqZLTWzKjPLq9V+kpnNNLMV0faf\nNfK6J5tZqZmtM7O3zey4psbWFK6e8YpddoFrr/UJxcMP+4mY1b75Bm66CXr2dJx4IsyerWEPERFp\n24L0SHQC3gIuBur6Gu0EvAL8vp72TZhZLvAIcA+wH/Ak8KSZ7dXgiU1UUVHBmMJCBmRnMzQzkwHZ\n2YwpLKSiomKT5265JZx+Osyd6ydi5udXsG2kkJ5k049M3p2WzckDC+ndu4KiIqjjEiIiIq2e1ffL\nvFEnm1UBQ51z0+po6wGUAfs5597ZzHX+CWzlnMurcWwusMA5d1Edz+8LlJSUlNC3b99GxVpRUcGw\n3FxGlJYyqKoKw2c5syIRbsnJYercuaSnpzd47vDSUgbXOPcZIpxPDl/gzz3nHCgogD32aFRIIiIi\nLW7+/Pn069cPoJ9zbn5zr5cscyRygedqHZsVPR4XN48axYgaiQCAAYOrqhheWsrE0aM3e+5xtc49\ngSruppSujKaiAm6/HXr39tU1n34aqqriFb2IiEhySpZEYmegdsHq5dHjcTGnuJhB9XyzD66qYs60\nTTpVGnXuCVSR3XkaHTvGjs2aBUOGwO67wy23wLffNit0ERGRpNU+7AAaUD2CUK/hw4fTtWvXjY7l\n5+eTn5+/0THnHJ0qK3/qTajrhbaqrMQ5h9nGz2rMud27VvLc24777jOKiqC83Ld98gmMHAl//COc\neaYf9thnn4bekYiISPxMmTKFKVOmbHRs1apVcX2NZEkklgE71Tq2I5v2Umxk0qRJjZojYWasSUvD\nQZ0JgQPWpKVtkkQ05dzttjMuvxyGD4fp0/0wx+zZ/jlr18Ldd/vHkUfCJZdAXl6sZoWIiEgi1PXj\nusYcibhI9NBGY2dyzgWOqXXs2OjxuDh0yBBmRep+uzMjEfrn5dXZ1tRz27XzwxrPPgulpb4XonPn\n2PNfegmGDYPddvPVNVeuDPR2REREkkKQOhKdzKyPme0XPdQz+ndmtH0bM+sD7I3/Eb9ntH2nGtd4\nwMz+VOOyk4HjzGyEmfU2s7FAP+COgO9rE5dPmMAtOTnMiER+ym4cMCMSYVJODiPHj4/7uXvu6Xsm\nli6F227beDXHZ5/B1Vf7Ilf/938wv9nzZkVERFpekB6JA4AFQAn++3QiMB+4NtqeF20vjrZPibZf\nUOMamdSYSOmcmwvkA+fja1T8EjjROfd+gPjqlJ6eztS5c5lXUMDArCxOzMhgYFYW8woKGlz62dxz\nAbp08cMZpaUwcyaccIKvpgl+t9H774d+/WLVNX/4IV7vWkREJLGaVUciLEHqSNRW18TKlji32qJF\ncOedftOw2qs6dt4Zfvc7OP986NatWS8jIiKykdZaR6LFNScRaG4SAX6OxMSJfgfSu+/eeDXHsmUw\ndqzfpfTXv/bVNVMw3xMRkTagzSYSyaJTJ9/z8M478OKL8MtfQvW8zspKP9RxyCFwwAF+CGT9+lDD\nFRER2YgSiSRh5peGTp3qdxe9+mrYbrtY+/z5flJmZib84Q9+sqaIiEjYlEgkoe7d4U9/8sMe990H\nNaeBrFwJ118P2dl+GelLL2nYQ0REwqNEIol16ADnnANvvgmvvgr5+bEiVlVV8O9/w1FHQZ8+8Ne/\nwpo1oYYrIiJtkBKJFGAGubnwyCN+SGPsWL+yo9r//gcXXOBrUowc6Utzi4iItAQlEimmWzcYMwY+\n/dQnFoccEmv79lu/SVivXrHqmtqBVEREEkmJRIraYgs/1DFnDpSU+CGQLbf0bc75bcwHDYK99vLV\nNVevDjVcERFppZRItAJ9+/pJmUuW+ImYmZmxtoULobAQMjJ8dc0PPggvThERaX2USLQi228PV13l\n50hMneonYlb77ju44w7IyYGBA6G4GDZsCC9WERFpHZRItELt2/vCVi+8EJuIudVWsfbZs/025rvv\nDjffDF9/HV6sIiKS2pRItHL77AN33eWHPSZOhJ49Y21lZXDFFX61x3nn+eqaIiIiTaFEoo3YZhsY\nMQI+/NAPawwaFGtbtw7uvdfXozjiCPjXv+DHH8OLVUREUocSiTamXTu/jfnMmX7i5SWXQM1d0F9+\nGU4+2VfOnDABVqwIL1YREUl+SiRC0Jyt2+O57Xvv3nDbbbB0qZ+IueeesbYlS2D0aD/scfbZvrpm\nmFvOp+J29yIibYESiRZSUVHBmMJCBmRnMzQzkwHZ2YwpLKSioiKh5zZGejpcfDG8/35sImb1Tuk/\n/FDBUw8WcuqB2RyyZSY/3yGb0RfH77Ubkuj3LSIiceCcS7kH0BdwJSUlLhWsXr3aHbv33m5GJOKq\nfL0oVwVuRiTijt17b7d69eqEnNscn3ziXGHhardrZG/3NBu/djER12eHvd3ChYl5befCe98iIq1d\nSUmJAxzQ18XhO1k9Ei3g5lGjGFFayuCqKqI/9DFgcFUVw0tLmTh6dELObY7sbNjajeKvlHI8G7/2\nCVRx3YpSfr7naE47zVfXjPfIQ1jvW0REmkaJRAuYU1zMoHo2vRhcVcWcadMScm5zzSkuZnA9r30C\nVWzrpvHoo9C/P/Tr56trrlsXv9cO632LiEjjKZFIMOccnSorf/pVXZsBW1VW1jmZsDnnNldjXnub\nSCW+dwwWLIDf/MaX577qKr+pWCJfO1HvW0REmkaJRIKZGWvS0qjvK88Ba9LSMNv0a7M55zZXY167\nS2YaDzxgHHhg7PhXX8ENN/jCVyed5KtrNvX7Psz3LSIiTaNEogUcOmQIsyJ13+qZkQj98/IScm5z\nbe61Dzsxj7POgtdfh9deg9NPh7Q0315VBU8+CcccA/vu66trrlkTv9dO5PsWEZEmiMeMzZZ+kKKr\nNqbXWoEwvQmrNoKcG0bcy5Y5N26cc7vs4lz0lJ8eXbs6d9llzn30UWJeW0RENi/eqzbMpeA4s5n1\nBUpKSkro27dv2OE0SkVFBRNHj2bOtGlsVVnJ2rQ0Ds3LY+T48aTXLC0Z53PDiruyEp54Am6/HV55\nZeM2MzjuOF9Vc+BAqKfjIdT3LSLSWs2fP59+/foB9HPOzW/u9ZRIhMA5F3h8vznnNlfQ116wwFfO\nfOQRWL9+47bdd/fFsM45B7p2jf9ri4jIxuKdSGiORAia84UY5pdp0Nfef3/429982e0bboAePWJt\nH30El10GGRk+oSgtje9ri4hIYimRkBaz3XZw5ZWwaJEf9jjmmFjbmjVw552w114wYAA89RRs2BBe\nrCIi0jhKJKTFtWsHQ4fCc8/Be+/BhRdCp06x9uef9+29esFNN8HXX4cXq4iINEyJhIRqr718T8SS\nJTBpkk8eqpWX+x6MjAz47W/h7bdDC1NEROqhREKSwtZb+7kSCxfC9Ol+VUe19ev9HIv99oPDDoPH\nHvOrQkREJHxKJCSpRCI+iZg+HT78EC69FLp0ibW/8gqceipkZcF118Hy5aGFKiIiKJGQJLb77nDr\nrbB0aWwiZrXPP4drroHu3eHMM311TRERaXlKJCTpde7sJ2S++66foDl0aKyI1Q8/wMMPw8EHw0EH\nwUMPwfffhxuviEhbokRCUoaZXzL6xBN+CemVV8K228ba33gDzjrL70A6erTvyRARkcRSIiEpKSvL\nF7dasgTuvRf69Im1rVgBEyb4wlennAL//W/TdyAVEZHGUSIhKa1jRzj3XF+G+7//9YlDu3a+bcMG\nePxxOPzwWHXNtWvDjVdEpLVRIiGtghn07w+PPgqffgp//CPsuGOs/e23fS2KzEw/JFJeHlqoIiKt\nihIJaXUyMmDcOPjsMz/58uCDY21ff+2rZe62m5+0+fzzGvYQEWkOJRLSam25JZxxBrz2ml8eeuaZ\nsMUWvq2qyu/nMWAA7L23X1763XfhxisikoqUSEiLCXPL+gMPhAcfhMWLYfx432tRrbTU7zyakeEL\nYH34YWhhioikHCUSklAVFRWMKSxkQHY2QzMzGZCdzZjCQioqKkKJZ8cdYdQoKCvzpbYPOyzWtno1\n3HYb9O4NgwfDM8/4ngsREamfEglJmIqKCobl5pJbVMTs8nKeWrqU2eXl5BYVMSw3N7RkAiAtDU4+\nGV5+Gd56y0/E7Ngx1j5rFpxwAuyxh99M7NtvQwtVRCSpKZGQhLl51ChGlJYyuKoKix4zYHBVFcNL\nS5k4enSY4f2kTx+45x5fk+LGG32NimqLFsGIEX7Y43e/89U1RUQkRomEJMyc4mIG1TM2MLiqijnT\nprVwRA3bdlu44gr4+OPYRMxqa9fC3XfDvvvC0UfDv/8NP/4YXqwiIslCiYQkhHOOTpWVP/VE1GbA\nVpWVoU7ArE+7dpCXB7Nnw/vvw0UXQadOsfYXX4Rhw/wS0j//GVauDC9WEZGwKZGQhDAz1qSlUV+a\n4IA1aWmY1ZdqJIecHCgq8vt2TJ7sdySt9tlncPXVsOuu8Jvf+OqaIiJtjRIJSZhDhwxhVqTuj9jM\nSIT+eXktHFFwXbtCYSF88AHMmAHHH++raYLfbfS++6BvXzj0UPjnP6GyMtx4RURaihIJSZjLJ0zg\nlpwcZkQiP/VMOGBGJMKknBxGjh8fZniBRCJ+aejTT/t6E8OH+ySj2quvQn6+3zBs3DhYtiy8WEVE\nWoISCUmY9PR0ps6dy7yCAgZmZXFiRgYDs7KYV1DA1LlzSU9PDzvEZunVC265xQ973HWXr5BZ7Ysv\nYMwY6N4dTj/dV9dMwukgIiLNZsk42W1zzKwvUFJSUkLfvn3DDkcayTmX9HMimsM5eOkluOMOePLJ\nTYtZ9esHl1wCp54KHTqEEqKICPPnz6dfv34A/Zxz85t7PfVISItpzUkE+DkTRx0FU6f6yplXXQXb\nbRdrLymBc87xO5D+4Q++XLeISKprciJhZoeZ2TQzW2pmVWa2yYw5MxtnZp+b2Vozm21mvTZzzTHR\na9V8vN/U2ESSRffucP31PlmonohZbeVK35adDb/6FfznP61z2CMVeztFpOmC9Eh0At4CLoZNV/eZ\n2e+BAuAC4CBgDTDLzLbYzHXfBXYCdo4++geITSSpdOzoeyHefBPmzIHTToP27X3bhg2+9+LII2PV\nNdesCTPa5ku2vVVEJPGanEg452Y6565xzj0JddYbuhS4zjlX7Jx7FzgL2AUYuplL/+icW+Gc+zL6\n+LqpsYkkKzM45BCYMsXXnxgzBnbaKdb+v//B+ef7mhSXXw6ffBJerEEl894qIpI4cZ0jYWbZ+N6E\n56uPOedWA/OA3M2cvnt0uGSRmT1sZpnxjE0kWXTrBmPH+oTiH/+An/881vbttzBxol8RkpcHzz6b\nOsMeqbK3iojEV7wnW+6MH+5YXuv48mhbfV4DzgEGAb8DsoGXzaxTA+eIpLQttoBf/xrmzoU33oCz\nz/bHwCcPxcUwaJCvrnnHHZDsP+hTbW8VEYmP9i30OkYd8ymqOedm1fjzXTN7HfgUOAW4r77zhg8f\nTtea1YCA/Px88vPzmxetSAs74AC4/3646SY/V+Ivf/G7kQIsXOiXjf7hD36+xcUXQ+/eYUa7qabs\nrdLaV++IJJMpU6YwZcqUjY6tWrUqrq/RrDoSZlYFDHXOTYv+nQ0sAvZzzr1T43kvAQucc8ObcO3X\ngdnOuVF1tKmOhLRqP/7odyC9/Xa/qqO2gQN9cnHccX6TsWQwIDub2eXldSYTDjg2K4vnyspaOiwR\nqSWp60g458qAZcAx1cfMrAtwMPBqY69jZp2B3YAv4hmfSKpo397vMPrSS/DOO34iZseOsfZnn4Uh\nQ2CPPfycim++CS3Un7SmvVVEpPGC1JHoZGZ9zGy/6KGe0b+rJ0feCow2syFmti/wILAEeKrGNZ43\ns4tq/H2TmR1uZj3M7BDgCeBHYOP+GJE2aN994e67fSnuiROhZ89Y2yef+FUeGRk+2fjf/8KLszXu\nrSIimxekR+IAYAFQgv/vxERgPnAtgHPuRuB24G78ao2OwHHOuR9qXCMb2L7G37sCjwAfAP8EVgA/\nd859FSA+kVZpm21gxAi/WVhxsR/eqLZunZ9b8bOf+boUU6f64ZGW1Nr3VhGRummvDZEUtnChX9Fx\n//3w3Xcbt+26K1x4IZx3HuywQ8vHpomVIskpqedIiEjL6t3bT8hcutT/b83VHEuWwKhRfm+Pc87x\ne320JCURIm2DEgmRVqBLFygogPffh1mz4IQTfDVNgO+/hwce8EtMc3PhkUfghx8avp6ISGMpkRBp\nRSIRP3eiuBg+/hhGjoStt461v/YanH6631RszBj4ooF1Uak47CkiLU+JhEgr1bMn3HyzH+K4+27Y\nZ59Y2/LlMG6cTyjy8+HVV301TW26JSJNpcmWIm2Ec/Dyy34uxZNP+t1Ha+rTp4K0FbmMWxbbL8MB\nsyIRbsnJ0coLkVZCky1FJBAzOOII+Ne/oKzMl9zevsYi7PK3RzH281KO06ZbItIESiRE2qDMTJgw\nARYvjk3E3I5ifoE23RKRplEiIdKGdegAZ50F8+Y59tih4U233LeVfPdd6g2FikhiKZEQESIRo7JT\nWr1b9Dqg7Ns0dt3VGDHCrwgREQElEiIS1dCmW08T4SvyWLUKJk3ym4UdfzzMnAlVdY+GiEgboURC\nRICGN926cbcchpwxni23jB53MH2638Z8zz3htttg1aqwIheRMCmREBGg4U23pi+Yy0MPpbNkCVx/\nvZ+sWe2jj+DSS/3eHhdfDKWl4b0HEWl5qiMhInVqaNOtH3/01TNvvx1efHHT9gED4JJL/PBHu3YJ\nDlREmkR1JESkRTS06Vb79nDSSfDCC/C//8EFF8BWW8Xan3sOTjwRevWCm26Cr79ugYBFJBRKJKRN\naE7PWyr22lVridj32QfuusvvQHrLLbDbbrG28nK48ko/7HHeefDOOwkPR0RamBIJabWas29EKu85\nEVbsW28Nw4fDhx/CM8/A4MGxtnXr4N57oU8fOPxwePxxqKxMaDgi0lKccyn3APoCrqSkxInUZfXq\n1e7Yvfd2MyIRV+UXGbgqcDMiEXfs3nu71atXJ+TcsCVb7AsXOnfppc516eJcNJyfHhkZzl13nXPL\nl7doSCJtXklJicMvyurr4vCdrB4JaZVuHjWKEaWxzaeg8ftGNOfcsCVb7HvsAbfe6ncgLSqCnJxY\n29Kl8Mc/+hUgZ50Fb7zRoqGJSJwokZBWaU5xMYPqqZS0uX0jmnNu2JI19vR0uOgieO89mD3bT8Ss\nrn31ww/w0ENw0EFw8MHw8MPw/fehhCkiASiRkFbHOUenyob3jdiqsrLOiYjNOTdsqRC7mV8a+uST\nsGgRXHEFbLNNrP311+HMM6F7d7jmGt9rISLJTYmEtDpmxpq0hveNWJOWVufyxuacG7ZUiz0rC268\n0Q97VE8W6kkXAAAbM0lEQVTErPbll3Dddf45p54Kr7ziZ1ZIw5IxwZXWT4mEtEoN7RsxMxKhf15e\nQs4NWyrGvtVWcO65sGABvPwynHJKrIjVjz/CY4/BYYdB377w97/7FSASk8orjKSViMeMzZZ+oFUb\nshnVqxem11q9ML0JqzaCnBu2VI69piVLnBs92rkdd9x0tce22zp35ZXOlZWFHWX4km2VjqQGrdoQ\naYSG9o2YOncu6enpCTk3bKkce00ZGX5o47PP4MEH/UTMal9/7YdEdtsNhg6F559vu8MeybZKR9om\n7bUhbYJz9e8bkchzw5bKsdf2+ut+b49HH920mFVODhQU+GWknTuHE18YBmRnM7u8vM4Jtg4YmJXF\n7LKylg5Lkpz22hAJoDlfpqn8RZzKsdd20EF+mejixb63YpddYm2lpX7n0YwMuOwyvyNpa+dSYJWO\ntA1KJEQkpey0E4we7ffxePRR6N8/1rZ6NUye7AthHXccTJ8O9ZTVSHmptkpHWi8lEiKSdBrzKzot\nza/w+O9//YqPc8+FDh1i7TNn+m3Me/f21TW//TaBAYckFVfpSOujREJEkkJzljHut5+vRbFkCdxw\nA/ToEWv7+GO/mdiuu8KFF/rqmq3F5RMmcEtODjMikZ96JhwwIxJhUk4OI8ePDzM8aSOUSIhI6Coq\nKhiWm0tuURGzy8t5aulSZpeXk1tUxLDc3EbXRNhuO79t+aJFvnrmMcfE2tas8dud77OPP/7EE75O\nRSprLat0JLVp1YaIhG5MYSG5RUUMrmNCw4xIhHkFBYydPDnQtd9/H+64wy8jXbNm47bu3f0eIL/9\nrU9CUl1rWqUjiaNVGyLS6iRys7G99oI77/T7dtx6K/TqFWv77DO46io/7HHuufDWW4FfJikoiZAw\nKJEQkVC11DLGrl3h0kth4UK/muMXv4i1rV/vy2/vv79fBVJXrQoRqZsSCREJVUsvY4xE/NLQZ57x\n9SYuuwy6dIm1z5kDp53mJ2yOGwfLlsXlZUVaLSUSIhK6sJYx9uoFkyb5YY877/TDINW++ALGjPHz\nKM44A157rXGluFNx3plIcyiREJHQhb2MsXNnvzT03Xf93h0nneR7LsAPcfzjH5Cb66trPvggfP/9\nxudrB05py7RqQ0SSQkVFBRNHj2bOtGlsVVnJ2rQ0Ds3LY+T48aEsY/z0U/jLX+Cee/xGYTXtsAOc\nfz787nfQtatfujqitJRB0c2zHDArEuGWnBwtw5SkE+9VG0okRCTpJNMyxnXrYMoUv4R0wYKN29q1\ng/2zCxm3qIjjXPyXrookgpZ/ikirlyxJBEDHjvCb30BJCbzyCpx6KrRv79s2bICvPy5mcB1JBDR/\n6apIKlAiISLSCGZw6KHwz3/6YY9rroEdd3Rsg3bglLZNiYSISBPtsgtcey0sXmy0377hpasrf0yD\nelMNkdSnREJEJKAttoBB+fUvXX2aCO8tz2OvvaCoCLSIQ1ojJRIiIs1Q39LVYiJcQA6rGM8HH0BB\nAWRkQGEhfPhhmBGLxJcSCRGRZqhvB843Cgq44cG5HH54bOlnRQXcfjv07g2DB8PTT0M9W4yIpAwt\n/xQRiaO6lq6+845fPvrww345aU09e8LFF/uVIV27Js+yV2m9tPxTRCSJ1ZUI/Oxn8Ne/wpIlcPPN\nkJ0da/vkkwrGjSzkwG2zObJzJodnqCqmpBYlEiIiLWTbbWHkSL9Z2LRpcPTRFXQjl39QxIeunP+s\nXcp/Pi/noNuLOHbvXL75RsmEJD8lEiIiLaxdOxgyBPrvPYq/RUo5nqqfFogacDxVjFpcys+6j+b6\n62HlyjCjFWmYEgkRkZDMKS5mcD2zLU+gii2/m8Yf/gC77grnnOOra4okGyUSIiIhcM7RqbLhqphd\nqQQc338PDzwABxwAhxzi9/744YcWDFakAUokRERCYGasSWu4KmZ6RhojRxpbbx07Pncu/PrX0KMH\njB0LX3zRAsGKNKDJiYSZHWZm08xsqZlVmVleHc8ZZ2afm9laM5ttZr0acd2LzazMzNaZ2WtmdmBT\nYxMRAVJmb4tDh9RfFXNmJMKRw/K4+Wa/2uPuu2GffWLty5b5Mt09evjEYu5cSJG3La1MkB6JTsBb\nwMWwaTJtZr8HCoALgIOANcAsM9uivgua2anARGAMsD/wdvSc7QPEJyJtUEVFBWMKCxmQnc3QzEwG\nZCf/Msr6qmLOiESYlJPDyPHjAejUCc4/39ejeOklGDbMT9gEqKz0Qx2HHAIHHuiHQNavD+PdSFvV\nrIJUZlYFDHXOTatx7HPgJufcpOjfXYDlwNnOucfquc5rwDzn3KXRvw1YDNzmnLuxjuerIJWI/KSi\nooJhubmMKC1lUJVfAeGAWZEIt+TkMHXuXNLT0zd3mVBUVFQwcfRo5kybxlaVlaxNS+PQvDxGjh/f\nYMyLF8Ndd/n6FLVXdWy/PZx3Hlx4IWRmNi6OugppSeuU1AWpzCwb2Bl4vvqYc241MA/IreecNKBf\nrXMc8Fx954iI1HTzqFGMKC1lcNXGyygHV1UxvLSUiaNHhxleg9LT0xk7eTKzy8p4cvFiZpeVMXby\n5M0mPpmZMGGCTyjuvx/894K3ciVcfz1kZfnei5deqnvYIxV7cST5xHuy5c74HwLLax1fHm2ry/ZA\nuyaeIyLykznFxQyqZxnl4Koq5kybVmdbsgnSI9ChA5x9NrzxBrz6KuTnQ/v2vq2qCv79bzjqqFh1\nzTVrfFt1L05uURGzy8t5aulSZpeXk1tUxLDcXCUT0mjtW+h1qnsa43rO8OHD6dq160bH8vPzyc/P\nb+JLiUiqaswyyq0qK1t9170Z5Ob6x8SJPmm46y4/KRPg3Xfhggvg97/3+3ps+CrWi/PTNfCJl4v2\n4oydPLlFYm/t/78J05QpU5gyZcpGx1atWhXX14jrHIno0MYiYD/n3Ds1nvcSsMA5N7yOa6QBa4Fh\nteZa3A90dc6dVMc5miMhIj8ZkJ3N7PLyOpMJBxyblcVzZWUtHVbofvgBpk71G4a9+urGbbuRzUfU\nf88GZmUxO4H3rKKigptHjWJOcTGdKitZk5bGoUOGcPmECUk7n6W1SOo5Es65MmAZcEz1sehky4OB\nV+s5pxIoqXWORf+u8xwRkZo2t4yyf94mq9TrlSpLRxtjiy38UMecOb4q5jnnwJZbAji2pnG9OImg\nYZXWJUgdiU5m1sfM9ose6hn9u3pu8K3AaDMbYmb7Ag8CS4CnalzjeTO7qMZlbwHON7OzzGxP4C5g\nK+D+pr8lEWlrGruMsj5tYdJh375w331+cub11xsV7RouhrUmLS1hww2pPDlWNhWkR+IAYAG+F8Hh\n6z/MB64FiC7XvB24G79aoyNwnHOuZkHXbPwkS6LnPAaMBMZFr/0zYJBzbkWA+ESkjUlPT2fq3LnM\nKyhgYFYWJ2ZkMDAri3kFBZtd+tnWfh3vsANcdRWc8rshzKinF+dpIqzYkEdxMWzYEP8YWsvkWPGa\nNUciLJojISINacrkvTGFheQWFdW5edaMSIR5BQUtNumwJVUnUMNr9Aw4fBJxATl8wVwgnexsuOgi\nOPdc2Gab+q/X2HvunGNoZiZPLV1a73NOzMjgycWLNQEzQZJ6joSISDJoyhdQW/11XFcvzoDuWdzT\nv4Ats3wSAVBWBldcARkZseqa1YIMCTVmj5FEDqtI/CmREJE2qylLR1uj2sWwnv+0jGn/ncyiRek8\n/TQMGhR77rp1cM890KcPHHEEPPRQBb/8ebAhoXhOjpXwKZEQkTZLv45jar7HSASOPx5mzoQPPoDC\nQqg5zeTll+GSs0Zx2fvBJkw2d3KsJBclEiLSpunXccN694bJk2HpUl+PYs89/fHtKOYXBBsSas7k\nWEk+mmwpIm1afZMOZ0Z/HeuLbWPOwXPPOa7Ny+SV9fVPmMzbJYOnljRuwqQqW7YsTbYUEYkj/Tpu\nGjM49lijw84NDwl9sCyNsWONzz9vzDWVRKQyJRIi0uYF3YGzLWtoSOhpInxZlce4cdCjB5x2mq+u\nmYwd4KnYK59slEiIiNSgX8eNU9+EyWciEa7skkNFxE+Y/PFHePRR6N/fb3X+97/7FSBhaguVTFuS\nEgkREWmy+oaE3igo4PUlc/n003RGjfKVNKstWOALW2Vm+uqan37a8nHHu5KpejQ02VJEROKgvgmT\n69fDY4/B7bfDm29u3BaJQF4eXHIJHHWUn38Rz9euSzwqmab6zqWabCkiIkmnvi/yDh3grLPgjTfg\ntdfg9NMhLc23VVXBk0/CMcfAvvvCXXfBd9817vWCDk80t5JpW9ubpTGUSIiISIs4+GB4+GH47DO4\n9lro1i3W9t57cOGFsOuuMHw4fPxx/dcJ+mUej0qm2rl0U0okRESkRe28M1xzjZ8j8c9/wqGHxtpW\nrYJbb4U99vDVNWfM8D0XNQX9Mo9HJdO2ujdLQ5RIiIhIKNLS4NRT4ZVXYP58+M1v/FAI+KWi06fD\nL37hq2lOnuyTDGjel3lzKpm29b1Z6qNEQkREQrf//vC3v8GSJXDDDdC9e6zto4/gssv8DqQXXujY\nYm3wL/Pm7POhvVnqpkRCRESSxnbbwZVXwqJF8MQTcPTRsbY1a+Cuu4yFXwb/Mm9uJVPtzbKp9mEH\nICIiUlv79jB0qH+89x4UFcGDD/pk4iuG8AxFnFDHpmGN+TKvrmTK5MlN3ufj8gkTGPbCC7j69mZp\ngzuXqkdCRESS2t57w513+mGPSZNg2+wJnE8OxWw8PPE0Ea7Pbto25E0dhtDeLJtSQSoREUkpVVXw\n739XMP7y0Xz36TS6Uskq0lhJHqsYT//+6VxyCZx0UqxmRaKk4s6lKkglIiJtWiQCv/pVOm+VT2bG\nh2X0L1zMii5lrGIykM4rr/jVIFlZcN11sHx54mJJtSQiEZRIiIhIytp9d5g82Vi61A9/5OTE2j7/\n3Ner6N4dzjwTXn89vDhbMyUSIiKS8jp39pUx33sPnnsOTjzR91wA/PCDr6h58MFw0EHw0EPw/ffh\nxtuaKJEQEZFWw8zv3fHkk34J6ZVXwrbbxtrfeMPv/dG9O/zxj7B0aXixthZKJEREpFXKyvLFrZYs\n8cWu9tsv1vbllzB+PPToAaecAv/9r6+mKU2nREJERFq1jh19+e35833CcOqpvk4FwIYN8PjjcPjh\nvrrmvffC2rXhxptqlEiIiEibYAb9+/uNwsrL/dDGjjvG2t9+G847z+9AeuWV/jmyeUokRESkzcnI\ngHHj/JbmDz3kJ2FW++YbuOkm6NnTT9p87jkNezREiYSIiLRZW24JZ5wB8+b5x5lnwhZb+DbnYNo0\nOPbYWHXN774LN95kpERCREQE3yvx4IOweLGfiJmREWsrLYWLL/bHLr0UPvyw+a+XipWl66JEQkRE\npIYdd4RRo6CsLDYRs9rq1XDbbdC7Nxx3HEyf7kt2N1ZFRQVjCgsZkJ3N0MxMBmRnM6awkIqKivi/\nkRaiREJERKQOaWnwq1/Bf/4Db70Fv/2tXwFSbeZMOP542GMPv5nYt982fL2KigqG5eaSW1TE7PJy\nnlq6lNnl5eQWFTEsNzdlkwklEiIiIpvRpw/cc4+vSXHTTb5GRbVFi2DECL/ao7q6Zl1uHjWKETW2\nHwcwYHBVFcNLS5k4enSC30ViKJEQERFppG23hcsvh48/hqeeggEDYm1r1sBdd8E++8DRR8MTT8CP\nP8ba5xQXM6iecZDBVVXMmTYtwdEnhhIJERGRJmrXDvLyYPZseP99PxGzc+dY+4svwi9/CbvtBn/+\nM6xY4ehUWUl9e4UasFVlZUpOwFQiISIi0gw5OXDHHX7fjttu83Mmqn32GVx9NXTvbny6Ko360gQH\nrElLS8ltyZVIiIiIxEGXLnDJJX6paPVEzOq8YP16KP9uCM/U87U7MxKhf15ek14vWXovlEiIiIjE\nUSQCgwbB00/DRx/5iZhdu8IqJnA+ORQT+alnwgHTIxEm5eQwcvz4zV47GZePKpEQERFJkN12g4kT\n/bDHXXel03XPuZxJAbuTRT8y2J0sznQFbL3XXN57L73BUtzJunxUiYSIiEiCdeoEF1wA77+fzhMv\nTKbPL8tYYItZRBlfu8k8/ng6ubm+uuYDD/ihkNqSdfmoEgkREZEWYgZHHQVTp0J5uXH11bDddrH2\nN9+Ec86BzExfXXPJklhbsi4fVSIhIiISgu7d4U9/8snCffdB376xtpUrfVtWFpx8Mrz0UvIuH1Ui\nISIiEqIOHXwvxJtvwpw5kJ8P7dv7tg0b4F//gqOOMj78MjmXjyqREBERSQJmcMgh8Mgjvv7EmDGw\n886x9i8q47t8NF6USIiIiCSZbt1g7Fj49FOfWOTm1r989JkmLB9NBCUSIiIiSWqLLfxQx6uvwptv\npnP06XP5v8jGy0dPryqg/Ie5PPBAOmGsAFUiISIikgL69YOHH06ndNlkzv1TGcsz/PLRVUzmo4/S\nueQSyMiAwkJYuLDl4lIiISIikkJ22MHv31FebkydCkceGWurqIDbb4c99/TVNYuL/YTNRFIiISIi\nkoLat/c7jL74IrzzDpx/PnTsGGt/9lm/Q+nuu8PNN8M33yQmDiUSIiIiKW7ffeHuu30p7ptvhuzs\nWFtZGVxxhR/2OP98v/9HPCmREBERaSW22QZGjvTJQnExDBwYa1u3Du65B047Lb6vqUSijZkyZUrY\nIaQc3bNgdN+aTvcsGN23TbVrByecALNmwQcf+O3N09MT81oJSSTMrLOZ3Wpm5Wa21sxeMbMDGnj+\nEWZWVeuxwcx2TER8bZn+wTWd7lkwum9Np3sWjO5bw3r3httu86W4b78devSI7/UT1SPxN+AY4HRg\nH2A28JyZdWvgHAfsDuwcfXRzzn2ZoPhERETalC5doKDAl9yOp7gnEmbWAfglcIVzbo5z7hPn3LXA\nx8CFmzl9hXPuy+pHvGMTERFp6yJx/uZPRI9Ee6Ad8H2t4+uA/g2cZ8BbZva5mT1rZockIDYRERGJ\no/bxvqBz7jszmwv80cw+AJYDvwZygfoWnXwBXAC8CWwJnAe8ZGYHOefequP5HQBKS0vjHX6rt2rV\nKubPnx92GClF9ywY3bem0z0LRvetaWp8d3aIx/UsEXuXm1k28HfgCOBHYD7wIdDXObdPI6/xEvCp\nc+7sOtp+DfwjbgGLiIi0Pac75x5p7kXi3iMB4JwrA44ys45AF+fccjP7J1DWhMu8DhxaT9ss/ETO\ncmB9c2IVERFpYzoAWfjv0mZLSI/EJi9itg3wCXC5c+5vjTznWWC1c+5XCQ1OREREAktIj4SZDcRP\nnlyIX9J5I1AK3B9t/xOQUT1sYWaX4nsr3sNnSucBRwHHJiI+ERERiY+EJBJAV+B6IAP4GvgXMNo5\nV70HWTcgs8bztwAmArsAa4F3gGOccy8nKD4RERGJgxYZ2hAREZHWSXttiIiISGBKJERERCSwlEwk\nzOxiMyszs3Vm9pqZHRh2TMnMzMbUsSna+2HHlUzM7DAzm2ZmS6P3J6+O54yLVl5da2azzaxXGLEm\nk83dNzO7r47P3vSw4k0GZna1mb1uZqvNbLmZPWFme9R6zpZmVmRmK82swsz+1ZY3MWzkPXupjo0f\n7wwr5mRgZr8zs7fNbFX08aqZDa7RHpfPWcolEmZ2Kn5i5hhgf+BtYJaZbR9qYMnvXWAnYpuiNVSu\nvC3qBLwFXIzfQG4jZvZ7oABfgfUgYA3+c7dFSwaZhBq8b1Ez2Pizl98yoSWtw4DbgYOBAUAa8Gy0\n7k61W4HjgWHA4fiJ6FNbOM5k0ph75oC/EvusdQOubOE4k81i4PdAv+jjBeApM8uJtsflc5Zyky3N\n7DVgnnPu0ujfhr9Ztznnbgw1uCRlZmOAE51zfcOOJRWYWRUw1Dk3rcaxz4GbnHOTon93wZd/P9s5\n91g4kSaXeu7bfUBX59wvw4ssuUV/BH0JHO6ceyX62VoBnOaceyL6nN74JfQ/d869Hl60yaH2PYse\nexFY4JwbEWpwSc7MvgIuxycMcfmcpVSPhJml4bOq56uPOZ8JPYffy0Pqt3u0+3mRmT1sZpmbP0Xg\np5LvO7Px5241MA997hrjyGh39AdmdqeZbRt2QElma/yv6a+jf/fDL82v+XlbCHyGPm/Vat+zaqeb\n2Qoz+5+Z/alWj0WbZmYRMzsN2AqYSxw/Z4mqI5Eo2+N3Fl1e6/hyoHfLh5MyXgPOwRcI6waMBV42\ns32cc2tCjCtV7Iz/j1Zdn7udWz6clDID/8unDNgNX19mupnlulTrDk2AaI/qrcArzrnqeUs7Az9E\nk9Wa9Hmj3nsGfv+lT4HPgZ/hCyHuAbTp6shmtg8+cegAVAAnOec+MLP9idPnLNUSifoY9Y/PtnnO\nuZr11N81s9fx/+BOAe4LJ6pWQZ+7zag17POemf0PWAQcCbwYSlDJ5U5gLxo3Z0mfN6/6nm20F5Nz\n7t4af75nZsuA58wsO7r/U1v1AdAH34szDHjQzA5v4PlN/pyl1NAGsBLYgJ9MU9OObPprUerhnFuF\n3421za86aKRl+H9c+tw1U/Q/6CvRZw8zuwP4BXCkc+7zGk3LgC2icyVqavOft1r37IvNPH0e/t9t\nm/6sOed+dM594pyb75wbhV+gcClx/JylVCLhnKsESoBjqo9Fu7mOAV4NK65UY2ad8d3Mm/uHKPz0\n5beMjT93XfAzyPW5awIz2xXYjjb+2Yt+IZ4IHOWc+6xWcwnwIxt/3vYAuuO7qNukzdyzuuyP/2Xd\npj9rdYgAWxLHz1kqDm3cAjxgZiX4rcaH4yeP3B9mUMnMzG4CivHDGRnAtfgP0JQw40omZtYJ/8vF\nood6mlkf4Gvn3GL8mOxoM/sYv339dcAS4KkQwk0aDd236GMMfo7EsujzbsD3hsVl++JUFK1tkA/k\nAWvMrLqna5Vzbr1zbrWZ/Q24xcy+wY9r3wbMaasrNjZ3z8ysJ/BrYDrwFb4r/xbgP865d8OIORmY\n2QT8PKXFQDpwOnAEMDCunzPnXMo9gIvw/zFfh8+cDgg7pmR+4BOGJdH79RnwCJAddlzJ9Ij+46rC\nD53VfPy9xnPG4idyrcV/EfYKO+6wHw3dN/zkrpn4JGI98AnwF2CHsOMO+Z7Vdb82AGfVeM6W+LoJ\nK6P/gX8c2DHs2JP1ngG7Ai/hlzOuxU8svx7oHHbsId+3e6P/7tZF/x0+Cxwd789ZytWREBERkeSR\nUnMkREREJLkokRAREZHAlEiIiIhIYEokREREJDAlEiIiIhKYEgkREREJTImEiIiIBKZEQkRERAJT\nIiEiIiKBKZEQERGRwJRIiIiISGD/D6z6FN7ncZBrAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10c206a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pylab as plt\n",
    "%matplotlib inline\n",
    "plt.plot(x_test,f_test,'b-',linewidth=2)\n",
    "plt.plot(x,t,'ro')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>Try playing with the maximum order and extending the test data range...</p>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
